package com.linkgie.galaxyframework.httpproxy;

import com.linkgie.galaxyframework.httpproxy.annotations.RequestBody;
import com.linkgie.galaxyframework.httpproxy.annotations.ServiceProxy;

public class HttpServiceDefinition {

	/**
	 * 服务的路径；
	 * <br>
	 * 它是所有服务方法的根路径，默认为 /；
	 * 
	 * @return
	 */
	private String path = "/";

	/**
	 * 默认的回复转换器；
	 * <br>
	 * 当服务方法未指明自定义的回复转换器时，如果采用此默认回复转换器，如果服务的默认回复转换器也未设置，则采用系统预定义的默认回复转换器；
	 * 
	 * @return
	 */
	@Deprecated
	private Class<?> defaultResponseConverter = ResponseConverter.class;

	/**
	 * 默认的回复转换器；
	 * <br>
	 * 当服务方法未指明自定义的回复转换器时，如果采用此默认回复转换器，如果服务的默认回复转换器也未设置，则采用系统预定义的默认回复转换器；
	 * 
	 * @return
	 */
	private Class<?> defaultResponseHandler = ResponseHandler.class;

	/**
	 * 回复转换器工厂；
	 * <br>
	 * 当服务方法上未指定的回复转换器，同时服务上也未指定默认回复转换器，则通过此属性指定的回复转换器工厂创建每个方法的回复转换器；
	 * <br>
	 * 如果此属性也未设置，则采用系统预定义的默认回复转换器；
	 * 
	 * @return
	 */
	@Deprecated
	private Class<?> responseConverterFactory = ResponseConverterFactory.class;

	/**
	 * 回复转换器工厂；
	 * <br>
	 * 当服务方法上未指定的回复转换器，同时服务上也未指定默认回复转换器，则通过此属性指定的回复转换器工厂创建每个方法的回复转换器；
	 * <br>
	 * 如果此属性也未设置，则采用系统预定义的默认回复转换器；
	 * 
	 * @return
	 */
	private Class<?> responseHandlerFactory = ResponseHandlerFactory.class;

	/**
	 * 默认的请求体参数转换器；
	 * <br>
	 * 当 {@link RequestBody} 标注未指定转换器实现时，则采用此处的默认配置；
	 * 
	 * @return
	 */
	private Class<?> defaultRequestBodyConverter = RequestBodyConverter.class;

	/**
	 * @return the path
	 */
	public String getPath() {
		return path;
	}

	/**
	 * @param path the path to set
	 */
	public void setPath(String path) {
		this.path = path;
	}

	/**
	 * @return the defaultResponseConverter
	 */
	@Deprecated
	public Class<?> getDefaultResponseConverter() {
		return defaultResponseConverter;
	}

	/**
	 * @param defaultResponseConverter the defaultResponseConverter to set
	 */
	@Deprecated
	public void setDefaultResponseConverter(Class<?> defaultResponseConverter) {
		this.defaultResponseConverter = defaultResponseConverter;
	}

	/**
	 * @return the defaultResponseHandler
	 */
	public Class<?> getDefaultResponseHandler() {
		return defaultResponseHandler;
	}

	/**
	 * @param defaultResponseHandler the defaultResponseHandler to set
	 */
	public void setDefaultResponseHandler(Class<?> defaultResponseHandler) {
		this.defaultResponseHandler = defaultResponseHandler;
	}

	/**
	 * @return the responseConverterFactory
	 */
	@Deprecated
	public Class<?> getResponseConverterFactory() {
		return responseConverterFactory;
	}

	/**
	 * @param responseConverterFactory the responseConverterFactory to set
	 */
	@Deprecated
	public void setResponseConverterFactory(Class<?> responseConverterFactory) {
		this.responseConverterFactory = responseConverterFactory;
	}

	/**
	 * @return the responseHandlerFactory
	 */
	public Class<?> getResponseHandlerFactory() {
		return responseHandlerFactory;
	}

	/**
	 * @param responseHandlerFactory the responseHandlerFactory to set
	 */
	public void setResponseHandlerFactory(Class<?> responseHandlerFactory) {
		this.responseHandlerFactory = responseHandlerFactory;
	}

	/**
	 * @return the defaultRequestBodyConverter
	 */
	public Class<?> getDefaultRequestBodyConverter() {
		return defaultRequestBodyConverter;
	}

	/**
	 * @param defaultRequestBodyConverter the defaultRequestBodyConverter to set
	 */
	public void setDefaultRequestBodyConverter(Class<?> defaultRequestBodyConverter) {
		this.defaultRequestBodyConverter = defaultRequestBodyConverter;
	}

	/**
	 * 
	 */
	public HttpServiceDefinition() {
	}

	/**
	 * 
	 */
	public HttpServiceDefinition(ServiceProxy serviceProxyAnnotation) {
		this.path = serviceProxyAnnotation.path();

		this.defaultResponseHandler = serviceProxyAnnotation.defaultResponseHandler();
		this.responseHandlerFactory = serviceProxyAnnotation.responseHandlerFactory();
		this.defaultRequestBodyConverter = serviceProxyAnnotation.defaultRequestBodyConverter();

		// 旧版本兼容属性；于 2.8.9.RELEASE 版本废弃;
		this.defaultResponseConverter = serviceProxyAnnotation.defaultResponseConverter();
		this.responseConverterFactory = serviceProxyAnnotation.responseConverterFactory();
	}

}
